package vip.liux.backend.application.service.files;

import vip.liux.application.dots.ListResultDto;
import vip.liux.application.dots.PagedResultDto;
import vip.liux.backend.application.service.files.dtos.*;

public interface DirectoryDescriptorAppService {

    /**
     * 根据ID获取目录描述符
     * @param id 目录ID
     * @return 目录描述符
     */
    DirectoryDescriptorDto get(Long id);

    /**
     * 获取父目录下的目录描述符列表
     * @param parentId 父目录ID
     * @return 目录描述符列表
     */
    ListResultDto<DirectoryDescriptorInfoDto> getList(Long parentId);

    /**
     * 获取父目录下的目录描述符列表
     *
     * @param parentId 父目录ID
     * @return 目录描述符列表
     */
    ListResultDto<DirectoryDescriptorInfoDto> getTreeList(Long parentId);

    /**
     * 创建目录
     * @param input 创建目录输入
     * @return 创建的目录描述符
     */
    DirectoryDescriptorDto create(CreateDirectoryInput input);

    /**
     * 重命名目录
     * @param id 目录ID
     * @param input 重命名输入
     * @return 重命名后的目录描述符
     */
    DirectoryDescriptorDto rename(Long id, RenameDirectoryInput input);

    /**
     * 获取目录详情
     *
     * @param parentId 父目录ID
     * @param name     目录名称
     * @return 目录描述符详情
     */
    DirectoryDescriptorDto detail(Long parentId, String name);

    /**
     * 获取目录内容
     * @param input 目录内容请求输入
     * @return 目录内容分页结果
     */
    PagedResultDto<DirectoryContentDto> getContent(DirectoryContentRequestInput input);

    /**
     * 删除目录
     * @param id 目录ID
     */
    void delete(Long id);

    /**
     * 移动目录
     * @param input 移动目录输入
     * @return 移动后的目录描述符
     */
    DirectoryDescriptorDto move(MoveDirectoryInput input);
}